macd指标
1. macd指标定义
MACD的组成要素MACD称为异同移动平均线,是从双指数移动平均线发展而来的。MACD由一根快线、一根慢线、一根0轴线和无数根红绿柱状线组成。
如下图所示,粉色的是快线,也称DIFF线;蓝色的是慢线,也称DEA线。快线波动较大,慢线相对平稳一些。分割上下红绿柱的横轴就是0轴。
![请添加图片描述](https://img-blog.csdnimg.cn/direct/ff024efced814daaafb2c34acf04486d.png)
2. macd使用
2.1 快线DIF与慢线DEA的数值以及它们所在的位置
当DIF和DEA均大于0(处于0轴之上)并且向上移动时,表示市场处于多头行情中,可以买人或持股当DIF和DEA均小于0(处于0轴之下)并且向下移动时,表示市场处于空头行情中,可以卖出股票或观望当DIF和DEA均大于0(处于0轴之上)但都向下移动时,表示市场行情处于退潮阶段,股票将下跌,可以卖出股票和观望当DIF和DEA均小于0(处于0轴之下)但都向上移动时,表示行情即将启动,股票将上涨,可以买进股票或持股待涨
2.2 快线DIF与慢线DEA的交叉情况
当DIF与DEA都在0轴之上,而DIF向上突破DEA时,表明市场处于一种强势之中,股价将再次上涨,可以加码买进股票或持股待涨,这就是MACD指标黄金交叉的一种形式当DIF和DEA都在0轴之下,而DIF向上突破DEA时,表明市场即将转强,股价将止跌反弹,可以开始买进股票或持股,这是MACD指标黄金交叉的另一种形式当DIF与DEA都在0轴之上,而DIF却向下突破DEA时,表明市场即将由强势转为弱势,股价将下跌,这时应卖出大部分股票而不能买进股票,这就是MACD指标死亡交叉的一种形式当DIF和DEA都在0轴之下,而DIF向下突破DEA时,表明市场将再次进入极度弱市中,股价还将下跌,可以再卖出股票或观望,这是MACD指标死亡交叉的另一种形式。
参考:https://www.sohu.com/a/663842634_120762329
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/aedae0abeb964336a24a4f08da0d1c63.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a85479044e87446e84298cff17cf3bc5.png)
2.3 MACD指标与价格的背离
如果MACD在运行的过程中和商品价格的运行节奏出现了不完全同步的情况,那么这有可能是比较重要的转向提示信号。
顶背离:经常出现在上涨趋势中,当商品价格高点不断变高,而同时MACD指标的高点却有所降低,那就表示多头力量有所减弱,价格可能会发生回调。
![请添加图片描述](https://img-blog.csdnimg.cn/direct/d6bb1a25cdd54d1cbdc8d38dbffc4256.png)
底背离:在价格下跌的过程中,当商品价格的低点比前一次低点要低,而同时MACD指标的低点比前一次的低点要高,说明空头力量减弱,那么价格可能会出现反弹或反转。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fbd11b7bdd314fa3b0b5b7b86268feff.png)
3. backtrader 代码与分析
import backtrader as bt
import os, sys
file_path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(file_path + '/../')
class TestStrategy(bt.Strategy):
params = (('macd1', 12), ('macd2', 26), ('macdsig', 9), ('lookback_period', 30))
def __init__(self):
self.macd = bt.indicators.MACD(self.data.close,
period_me1=self.p.macd1,
period_me2=self.p.macd2,
period_signal=self.p.macdsig)
self.crossup = bt.indicators.CrossUp(self.macd.macd, self.macd.signal)
self.crossdown = bt.indicators.CrossDown(self.macd.macd, self.macd.signal)
self.lookback_period = self.p.lookback_period # 回溯周期
# 保存历史峰值和谷值
self.peak_price_list = []
self.peak_macd_list = []
def find_largest_and_second(self,price,macd,reverse=True):
if len(price) 0.01
has_cash = self.broker.get_cash()/self.data[0] > 0.01
dif = self.macd.macd[0]
dea = self.macd.signal[0]
dif_prev = self.macd.macd[-1]
dea_prev = self.macd.signal[-1]
###################### 2.1 章节 多头空头信号######################
# 多头行情判断
if dif > 0 and dea > 0 and dif > dif_prev and dea > dea_prev:
if has_cash:
self.buy(size=0.01)
# 空头行情判断
elif dif |